{
 "cells": [
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# Qiskit Aer: Pulse simulation of a backend model\n",
    "\n",
    "This notebook shows how to use the Aer pulse simulator using a model generated from a backend. In particular, we run a Rabi experiment to find a $\\pi$-pulse amplitude on a model of the Armonk one qubit backend, generated from the `FakeArmonk` mock backend.\n"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## 1. Imports"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "Import general libraries:"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 1,
   "metadata": {},
   "outputs": [],
   "source": [
    "import numpy as np"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "Import Rabi experiment generator and fitter from Ignis, and other functions for job submission:"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 2,
   "metadata": {},
   "outputs": [],
   "source": [
    "from qiskit.ignis.characterization.calibrations import rabi_schedules, RabiFitter\n",
    "\n",
    "from qiskit.pulse import DriveChannel\n",
    "from qiskit.compiler import assemble\n",
    "from qiskit.qobj.utils import MeasLevel, MeasReturnType"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "Import `PulseSimulator` and `PulseSystemModel` for pulse simulation, as well as the mock Armonk backend:"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 3,
   "metadata": {},
   "outputs": [],
   "source": [
    "# The pulse simulator\n",
    "from qiskit.providers.aer import PulseSimulator\n",
    "\n",
    "# Object for representing physical models\n",
    "from qiskit.providers.aer.pulse import PulseSystemModel\n",
    "\n",
    "# Mock Armonk backend\n",
    "from qiskit.test.mock.backends.armonk.fake_armonk import FakeArmonk"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## 2. Construct model from backend\n",
    "\n",
    "This section demonstrates the use of the `PulseSystemModel.from_backend` function for generating `PulseSystemModel` objects from a backend. \n",
    "\n",
    "**Note:** Hamiltonian parameters reported in the backends change over time. To stabilize this tutorial relative to these changes, after instantiating `FakeArmonk`, we manually override the Hamiltonian reported in the backend configuration to static values. \n",
    "\n",
    "Instantiate mock backend:"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 4,
   "metadata": {},
   "outputs": [],
   "source": [
    "armonk_backend = FakeArmonk()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "Manually override Hamiltonian parameters:"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 5,
   "metadata": {},
   "outputs": [],
   "source": [
    "freq_est = 4.97e9\n",
    "drive_est = 6.35e7\n",
    "armonk_backend.defaults().qubit_freq_est = [freq_est]\n",
    "armonk_backend.configuration().hamiltonian['h_str']= ['wq0*0.5*(I0-Z0)', 'omegad0*X0||D0']\n",
    "armonk_backend.configuration().hamiltonian['vars'] = {'wq0': 2 * np.pi * freq_est, 'omegad0': drive_est}\n",
    "armonk_backend.configuration().hamiltonian['qub'] = {'0': 2}\n",
    "armonk_backend.configuration().dt = 2.2222222222222221e-10"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "Generate model from backend:"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 6,
   "metadata": {},
   "outputs": [],
   "source": [
    "armonk_model = PulseSystemModel.from_backend(armonk_backend)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## 3. Run Rabi experiments and fit $\\pi$-pulse amplitude\n",
    "\n",
    "Next, we run a Rabi experiments generated using Ignis on the simulator using the system model generated from the Armonk backend.\n",
    "\n",
    "First, construct Rabi experiment schedules:"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 7,
   "metadata": {},
   "outputs": [],
   "source": [
    "# qubit list\n",
    "qubits = [0]\n",
    "\n",
    "# drive amplitudes to use\n",
    "num_exps = 64\n",
    "drive_amps = np.linspace(0, 1.0, num_exps)\n",
    "\n",
    "# drive shape parameters\n",
    "drive_duration = 2048\n",
    "drive_sigma = 256\n",
    "\n",
    "# list of drive channels\n",
    "drive_channels = [DriveChannel(0)]\n",
    "\n",
    "# construct the schedules\n",
    "rabi_schedules, xdata = rabi_schedules(amp_list=drive_amps, \n",
    "                                       qubits=qubits, \n",
    "                                       pulse_width=drive_duration, \n",
    "                                       pulse_sigma=drive_sigma,\n",
    "                                       drives=drive_channels, \n",
    "                                       inst_map=armonk_backend.defaults().instruction_schedule_map, \n",
    "                                       meas_map=armonk_backend.configuration().meas_map)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "Assemble the `qobj` for job submission. When assembling pulse schedules to be used with the pulse simulator, pass the `PulseSimulator` as the backend."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 8,
   "metadata": {},
   "outputs": [
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "/Users/dpuzzuoli/Documents/projects/qiskit-terra/qiskit/compiler/assemble.py:320: RuntimeWarning: Dynamic rep rates not supported on this backend. rep_time will be used instead of rep_delay.\n",
      "  warnings.warn(\n"
     ]
    }
   ],
   "source": [
    "backend_sim = PulseSimulator()\n",
    "\n",
    "rabi_qobj = assemble(rabi_schedules, \n",
    "                     backend=backend_sim,\n",
    "                     meas_level=1, \n",
    "                     meas_return='avg',\n",
    "                     shots=512)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "Run the simulation:"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 9,
   "metadata": {},
   "outputs": [],
   "source": [
    "sim_result = backend_sim.run(rabi_qobj, armonk_model).result()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "Generate the Rabi oscillation plot and find the $\\pi$-pulse amplitude:"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 10,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Pi Amp: 0.348467\n"
     ]
    },
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "rabi_fit = RabiFitter(sim_result, xdata, qubits, fit_p0 = [1.5, 2, 0, 0])\n",
    "\n",
    "# get the pi amplitude\n",
    "pi_amp = rabi_fit.pi_amplitude(0)\n",
    "\n",
    "# plot\n",
    "rabi_fit.plot(0)\n",
    "print('Pi Amp: %f'%pi_amp)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 11,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<h3>Version Information</h3><table><tr><th>Qiskit Software</th><th>Version</th></tr><tr><td>Qiskit</td><td>0.19.6</td></tr><tr><td>Terra</td><td>0.16.0.dev0+8636502</td></tr><tr><td>Aer</td><td>0.6.0</td></tr><tr><td>Ignis</td><td>0.4.0.dev0+7692062</td></tr><tr><td>Aqua</td><td>0.7.3</td></tr><tr><td>IBM Q Provider</td><td>0.7.2</td></tr><tr><th>System information</th></tr><tr><td>Python</td><td>3.8.3 (default, Jul  2 2020, 11:26:31) \n",
       "[Clang 10.0.0 ]</td></tr><tr><td>OS</td><td>Darwin</td></tr><tr><td>CPUs</td><td>8</td></tr><tr><td>Memory (Gb)</td><td>32.0</td></tr><tr><td colspan='2'>Mon Aug 10 11:11:08 2020 EDT</td></tr></table>"
      ],
      "text/plain": [
       "<IPython.core.display.HTML object>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "data": {
      "text/html": [
       "<div style='width: 100%; background-color:#d5d9e0;padding-left: 10px; padding-bottom: 10px; padding-right: 10px; padding-top: 5px'><h3>This code is a part of Qiskit</h3><p>&copy; Copyright IBM 2017, 2020.</p><p>This code is licensed under the Apache License, Version 2.0. You may<br>obtain a copy of this license in the LICENSE.txt file in the root directory<br> of this source tree or at http://www.apache.org/licenses/LICENSE-2.0.<p>Any modifications or derivative works of this code must retain this<br>copyright notice, and modified files need to carry a notice indicating<br>that they have been altered from the originals.</p></div>"
      ],
      "text/plain": [
       "<IPython.core.display.HTML object>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "import qiskit.tools.jupyter\n",
    "%qiskit_version_table\n",
    "%qiskit_copyright"
   ]
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "Python 3",
   "language": "python",
   "name": "python3"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.8.3"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 2
}
